package com.pro.meeting.web.weixin;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.pro.meeting.bean.UserInfo;
import com.pro.meeting.bean.Users;
import com.pro.meeting.service.UserInfoService;
import com.pro.meeting.service.UsersService;
import com.pro.weixin.main.MenuManager;
import com.pro.weixin.util.WeixinUtil;

import net.sf.json.JSONObject;

/*
 * Oauth2.0 操作
 */
@Controller
@RequestMapping("wx")
public class WeixinController {
	//################TODO 对象引用
	@Autowired
	UserInfoService userInfoService;
	@Autowired
	UsersService  usersService;
	
	
	//个人中心 用户openid获取
	@RequestMapping("loginAuth")   // wx/loginAuth
	public void  loginAuth(HttpServletResponse response) throws IOException{
		//授权后重定向的回调链接地址， 请使用 urlEncode 对链接进行处理
		String redirect_Url=MenuManager.REAL_URL+"wx/loginAuthInvoke"; //微信服务器回调地址
		try {
			redirect_Url=URLEncoder.encode(redirect_Url,"UTF-8");
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//1 第一步：用户同意授权，获取code
		String authUrl="https://open.weixin.qq.com/connect/oauth2/authorize?"
				+ "appid="+MenuManager.appId
				+ "&redirect_uri="+redirect_Url
				+ "&response_type=code"
				+ "&scope=snsapi_base"
				+ "&state=java1704#wechat_redirect";
		
		response.sendRedirect(authUrl);
	}
	/**
	 * 如果用户同意授权，页面将跳转至 redirect_uri/?code=CODE&state=STATE。
	 * 
	 */
	@RequestMapping("loginAuthInvoke")  // wx/loginAuthInvoke
	public String loginAuthInvoke(HttpServletRequest request){
		//第二步：获取code
		String code=request.getParameter("code");
		String state=request.getParameter("state");
		System.out.println("打印得到的：code"+code);
		System.out.println(state);
		//第三步：获取code后，请求以下链接获取access_token：
		String url="https://api.weixin.qq.com/sns/oauth2/access_token?"
				+ "appid="+MenuManager.appId
				+ "&secret="+MenuManager.appSecret
				+ "&code="+code
				+ "&grant_type=authorization_code";
		
		//第四步：访问 URL，返回JSON对象
		JSONObject json=WeixinUtil.httpRequest(url,"POST",null);
		System.out.println(json.toString());
		//第五步：openid
		String openid=json.getString("openid");
		/**
		 * 二步：根据openid查询wid（wei_users)
  		        三步：根据wid查询users表。
      		判断：如果users对象存在，登录成功，跳转个人信息页面
            	如果不存在，跳转到登录页面（让其登录）
		 */
		 //根据openid查询wid
		UserInfo userInfo=userInfoService.getByOpenid(openid);
		if(userInfo==null){
			//提示：访问异常。请取消关注。重新关注。
		}
		//根据wid查询users表
		Users users=usersService.getByWid(userInfo.getWid());
		if(users==null){
			String urlPath="/pages/weixin/login.jsp?wid="+userInfo.getWid();
			return urlPath;
		}else{
			request.setAttribute("users",users);
			return "/pages/weixin/users/users_view.jsp";
		}
	}
	
	//################TODO 会议发布 OPENID获取
	@RequestMapping("meetingPubAuth")   // wx/meetingPubAuth
	public void  meetingPubAuth(HttpServletResponse response) throws IOException{
		//授权后重定向的回调链接地址， 请使用 urlEncode 对链接进行处理
		String redirect_Url=MenuManager.REAL_URL+"wx/meetingPubAuthInvoke"; //微信服务器回调地址
		try {
			redirect_Url=URLEncoder.encode(redirect_Url,"UTF-8");
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//1 第一步：用户同意授权，获取code
		String authUrl="https://open.weixin.qq.com/connect/oauth2/authorize?"
				+ "appid="+MenuManager.appId
				+ "&redirect_uri="+redirect_Url
				+ "&response_type=code"
				+ "&scope=snsapi_base"
				+ "&state=java1704#wechat_redirect";
		
		response.sendRedirect(authUrl);
	}
	
	@RequestMapping("meetingPubAuthInvoke")  // wx/loginAuthInvoke
	public String meetingPubAuthInvoke(HttpServletRequest request){
		//第二步：获取code
		String code=request.getParameter("code");
		String state=request.getParameter("state");
		System.out.println("打印得到的：code"+code);
		System.out.println(state);
		//第三步：获取code后，请求以下链接获取access_token：
		String url="https://api.weixin.qq.com/sns/oauth2/access_token?"
				+ "appid="+MenuManager.appId
				+ "&secret="+MenuManager.appSecret
				+ "&code="+code
				+ "&grant_type=authorization_code";
		
		//第四步：访问 URL，返回JSON对象
		JSONObject json=WeixinUtil.httpRequest(url,"POST",null);
		System.out.println(json.toString());
		//第五步：openid
		String openid=json.getString("openid");
		/**
		 * 二步：根据openid查询wid（wei_users)
  		        三步：根据wid查询users表。
      		判断：如果users对象存在，登录成功，跳转个人信息页面
            	如果不存在，跳转到登录页面（让其登录）
		 */
		 //根据openid查询wid
		UserInfo userInfo=userInfoService.getByOpenid(openid);
		if(userInfo==null){
			//提示：访问异常。请取消关注。重新关注。
		}
		//根据wid查询users表
		Users users=usersService.getByWid(userInfo.getWid());
		if(users==null){
			String urlPath="/pages/weixin/login.jsp?wid="+userInfo.getWid();
			return urlPath;
		}else{
			/*
			     发单组用户：直接跳转目标页面
     		     抢单组用户：无权限页面
			 */
			if(users.getRid()==1){ //1 代表发单组
				request.setAttribute("users",users);
				return "/pages/weixin/meetingPub/meetingPub_add.jsp";
			}else{
				return "/pages/weixin/auth/unauth.jsp";
			}
		
		}
	}
	
}
